package com.yansu.cloud;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.yansu.cloud.bean.User;

/**
 * 
 * @author 言肃
 * @email yansu_code@126.com
 * @version 1.0
 * @date Jul 28, 2018 3:12:32 PM
 */
// 这里使用name属性而不是serviceId属性，因为serviceId已经失效，并且name可以省略
// 同时可以使用url属性设置hostname但是有url属性不能省略name属性，否则启动报错
// 这里和@RibbonClient类似，需要配置provider的spring.application.name
// Feign同样和Ribbon一样会因为@Compoment扫描到Feign的@Configuration而引起多个应用的冲突，解决方法和Ribbon一致
// @FeignClient(name = "microservice-provider-user")
@FeignClient("microservice-provider-user")
public interface UserFeignClient {

	// 这里有3个注意：
	// 1.不能使用@GetMapping必须使用@RequestMapping;
	// 2.这里的value指定的是provider的对应接口，是在consumer中映射provider中的接口
	// 3.参数绑定@PathVariable不能省略参数，必须标注参数名
	@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
	public User findById(@PathVariable("id") Long id);

	@RequestMapping(value = "/findAllUsers", method = RequestMethod.POST)
	public List<User> findAllUsers();
}
